package com.wltjack.sysmanage.common.datasource;

import com.wltjack.sysmanage.common.enums.DataSourceTypeEnum;
import lombok.extern.slf4j.Slf4j;

import java.util.ArrayList;
import java.util.List;

/**
 * @ClassName DynamicDataSourceContextHolder
 * @Description 动态数据源上下文管理
 * @Author kangliang
 * @Date 2021/03/01 11:24
 * @Version 1.0
 */
@Slf4j
public class DynamicDataSourceContextHolder {

    //存放当前线程使用的数据源类型信息
    private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();

    //存放数据源id
    public static List<String> dataSourceIds = new ArrayList<>();

    /**
     * 功能描述: 设置数据源
     *
     * @param dataSourceTypeEnum DataSourceTypeEnum
     * @return: void
     * @Author: kangliang
     * @Date: 2021-03-01 11:26
     */
    public static void setDataSourceType(DataSourceTypeEnum dataSourceTypeEnum) {
        contextHolder.set(dataSourceTypeEnum.getCode());
    }

    /**
     * 功能描述: 获取数据源
     *
     * @return: java.lang.String
     * @Author: kangliang
     * @Date: 2021-03-01 11:26
     */
    public static String getDataSourceType() {
        return contextHolder.get();
    }

    /**
     * 功能描述: 清除数据源
     *
     * @return: void
     * @Author: kangliang
     * @Date: 2021-03-01 11:26
     */
    public static void clearDataSourceType() {
        contextHolder.remove();
    }

    /**
     * 功能描述: 判断当前数据源是否存在
     *
     * @param dataSourceId
     * @return: boolean
     * @Author: kangliang
     * @Date: 2021-03-01 11:26
     */
    public static boolean isContainsDataSource(String dataSourceId) {
        return dataSourceIds.contains(dataSourceId);
    }

}
